package TCP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Day08_Server类用于创建一个简单的服务器，能够接收客户端的连接和信息。
 */
public class Day08_Server {

    public static void main(String[] args) {
        // 尝试创建服务器并监听8888端口
        try {
            ServerSocket serverSocket =
                    new ServerSocket(8888);
            System.out.println("服务器架设成功");
            // 不断接受客户端的连接
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println(
                        socket.getRemoteSocketAddress()+"已上线！");
                // 为每个客户端连接启动一个新的线程处理
                Temp temp = new Temp(socket);
                temp.start();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}


/**
 * Temp类继承自Thread，用于处理每个客户端连接的线程。
 */
class Temp extends Thread{
    Socket socket;

    /**
     * Temp类构造函数，初始化处理客户端连接的线程。
     *
     * @param socket 客户端的Socket连接。
     */
    public Temp(Socket socket) {
        this.socket = socket;
    }

    /**
     * 重写run方法，用于读取并打印客户端发送的信息。
     */
    @Override
    public void run() {
        // 尝试读取客户端发送的数据
        try {
            InputStream inputStream =
                    socket.getInputStream();
            InputStreamReader inputStreamReader =
                    new InputStreamReader(inputStream,"utf-8");
            BufferedReader bufferedReader =
                    new BufferedReader(inputStreamReader);

            String info;
            // 不断读取客户端的信息并打印
            while (true) {
                info = bufferedReader.readLine();
                System.out.println(
                        socket.getRemoteSocketAddress()+
                                "说："+info);
            }


        } catch (IOException e) {
            // 当客户端断开连接时打印信息
            System.out.println(socket.getRemoteSocketAddress()+
                    "离线了！");
        }
    }
}
